/* Copyright (C) 2021 Rain */

/* This file is part of XNIX. */

/* 
  XNIX is free software: you can redistribute it and/or modify 
  it under the terms of the GNU General Public License as published by 
  the Free Software Foundation, either version 3 of the License, or 
  (at your option) and later version. 
*/

/*
  XNIX is distributed in the hope that it will be useful, 
  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
  GNU General Public License for more details. 
*/

/*
  You should have received a copy of the GNU General Public License 
   along with XNIX. If not, see <https://www.gnu.org/licenses/>.  
*/




#ifndef _SYSCALL_H
#define _SYSCALL_H

#include <kernel/types.h>
#include <kernel/errno.h>

#define SYSCALL_NR 128


extern int no_syscall(void);
extern int do_exit(__uint64_t);
extern int sys_print(char *);


#define do_call_1(nr, a) 		\
	__asm__ __volatile__ (		\
		"int $0x80\n\t"		\
		:: "a" (nr), 		\
		   "b" ((__uint64_t) a)	\
	)

#define do_call_0(nr) 		\
	__asm__ __volatile__ (	\
		"int $0x80\n\t"	\
		:: "a" (nr)	\
	)


#endif

